package com.davidlife.javaee.jdbc.spring.jdbctemplate;

import com.davidlife.javaee.jdbc.jdbcpool.utils.JDBCUtils;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.List;
import java.util.Map;

/*
* Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC开发。
    * 步骤：
        1. 导入jar包(lib/JDBCTemplate/ 目录下的所有jar包)
        2. 创建JDBCTemplate对象，它依赖于数据源DataSource
            * `JDBCTemplate template = new JdbcTemplate(ds);`
        3. 调用JDBCTemplate的方法来完成CRUD操作
            * update():执行DML语句（增、删、改）
            * queryForMap():结果封装为Map，列名作为key，值作为value，将这条记录封装为map集合
            * queryForList():结果封装为List集合，
                + 是将每一条记录封装为一个Map集合，再将Map集合封装到List集合中。
            * query():结果封装为JavaBean对象
                + query的参数：RowMapper，是一个接口，我们可以自定义一个RowMapper，也可以使用Spring默认的`BeanPropertyRowMapper`。
                    * 一般我们使用`BeanPropertyRowMapper`实现类，就可以完成数据到JavaBean的自动封装。
                    * `new BeanPropertyRowMapper<类型>(类型.class)`
                    * 使用`BeanPropertyRowMapper`时的一个注意事项：JavaBean中的基本类型的成员最好使用基本类型的封装类，否则若某列为null时，则可能抛某列不能将null转换为double等的异常。
            * queryForObject():将结果封装为对象（一般为基本类型对象）
                + 一般用于聚合函数查询
 */
public class JdbcTemplateDemo {
    public static void main(String[] args) {
        //1. 导入jar包
        //2. 创建JDBCTemplate对象
        JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
        //3. 调用方法
        String sql = "select * from student";
        List<Map<String, Object>> list = template.queryForList(sql);
        list.forEach(m -> {
            System.out.println("======================");
            m.forEach((k, v) -> {
                System.out.println(k + "---" + v);
            });
        });
    }
}
